package com.example.demo.decorator.version02;

/**
 * 抽象的装饰者，继承顶级抽象父类
 * 1.设置抽象组件，实际上用来接收并持有具体组件；
 * 2.实现顶级父类的抽象方法，实际上通过多态，调用具体组件的方法，实现方法复用
 */
public abstract class Decorator extends Pack {

    /**
     * 抽象组件，通过它来接收具体组件
     */
    private Pack pack;

    public void setPack(Pack pack) {
        this.pack = pack;
    }

    /**
     * 方法复用：执行具体组件中原本的方法
     */
    @Override
    public void toPack() {
        if (pack != null) {
            pack.toPack();
        }
    }
}
